home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_1
/
fft_kc
< prev
next >
Wrap
Internet Message Format
|
1995-03-31
|
11KB
From: Ken Cooke <kcooke@milton.u.washington.edu>
Subject: v06i005: fft_kc - Machine Code FFT, Part01/01
Newsgroups: comp.sources.hp48
Keywords: FFT
Organization: University of Washington
Followup-To: comp.sys.hp48
Approved: spell@seq.uncwil.edu
Checksum: 1244677838 (verify with brik -cv)
Submitted-by: Ken Cooke <kcooke@milton.u.washington.edu>
Posting-number: Volume 6, Issue 5
Archive-name: fft_kc/part01
BEGIN_DOC fft.doc
Here is some FFT code that I wrote several months ago but never got around
to posting. I tried to make it fast enough to be useful. The code is based
on the standard DIT radix-2 FFT, so the input length must be a power of 2.
All intermediate math is done in 15-digit precision, which gives very accurate
results. (a 1024-point FFT matches MATLAB to 12 digits)
I used the following definition of the FFT:
N-1
X[k] = Sum( x[n] * exp(-j*2pi*k*n/N) )
n=0
N-1
x[n] = 1/N Sum( X[k] * exp(j*2pi*k*n/N) )
k=0
Quick description of the programs in this UUENCODED directory:
FFT: machine code FFT. Input is a vector (either real or complex).
Size must be a power of two. Output is a complex vector. Includes
error checking. I believe this is as fast as the HP48 can be at a complex
FFT. Random 128-pt complex FFT: 7.5 seconds. About 8 times faster than
system RPL, and 1.5 times faster than the FFT in the HP71 mathpack after
compensating for clock speed differences. (I did not look at the mathpack
code)
IFFT: inverse FFT. Could have been combined with the FFT program, but I
hate using an additional argument to tell it which one to do.
ABSV: machine code absolute value. Input can be a vector or matrix.
Output is a vector or matrix containing the absolute values of the complex
elements. About 5 times faster than RPL.
ANGLE: same as ABSV, but returns the angle (i.e. phase) according to the
current angle mode. This is only 2 or 3 times as fast as RPL, because
the mcode arctan is such a bottleneck.
SPEC(trum): User code quickie that does FFT, ABSV, and then plots using the
built-in barplot function. Note that plot is from 0..2pi as returned by FFT.
DISCLAIMER
While I believe these programs to be accurate and bug-free, I
will assume no responsibility for any Memory Lost, hardware damage, or
poor test scores that result from use of this code.
Please let me know if you find a bug or have suggestions. I will
provide the SASM source to anyone who is interested.
Ken Cooke
N7VFE
kcooke@u.washington.edu
----------------------------------------------------------------------------
Machine Code FFT
Copyright 1992 Ken Cooke
----------------------------------------------------------------------------
END_DOC
BEGIN_ASC fft.asc
%%HP: T(1)A(R)F(.); @ tasc v2.52 file
"69A20FF764A0000000403505543440D9D20E163284E203064644584E20401424
356578BF18B9C19C2A276BA1FD0D1B0DF133102AB2E193632B2130460005014E
474C45450D9D20D29512BF8171040D9D208813065226C2A16881308A7538DA16
9B136DEE324B2A224430CCD205C000823174E78FB97601431C414781AF0B1341
6E16913117E143174147174CC8A861143174164048F19930D9CE81AF0C8F88AC
0153717F13606157717F058F0ACB28F6FEA28F7D6B28F64E9207134150716F81
AF1C04CE81AF0C5BA81AF138F27630B2130B2130D2100401424356540D9D20D2
9512BF8171040D9D208813065226C2A16881308A7538DA169B136DEE324B2A22
4430CCD200E000823174E78FB97601431C414781AF0813416E16913117E14317
4147174CC8A861143174164048F19930D9CE81AF0C8F88AC00572508FF6EB277
40136068F6DEB28FAC7B28F3F9B28F64E9207134150716F81AF1C04CE81AF0C5
AA8DF6630153717F8FA4CB2AF9AF7AF68FE19B201B2130B21306410040946464
4540D9D20D29512BF8171040D9D20881308A7532FA306FD7388130CCD2033000
14713717414313504D6FCFA0EFEE44908D60B308DA1B306FD735C2268DA16442
30D9D20391402C2302CE3011920CA000CBD30D247332230DEE32FA42524430CC
D2077600823179E7E78FB97601C4143818F0981AF042034CA00004CA81AF0117
4143130169AC314234779208A250B4716914281AF0216413681AF08AC2819F0B
46808603F81A40A81AF10130D380FF0DDBD1C5808A040E5819F20D5DED4C5C5C
0C5C5C8C581AF11C0131152716F8FA4CB28F660C294BB0AF0AF1501152716F8F
A4CB28F660C204E711A8A360618F0481AF1413117481AF1AC614517420342000
014517481AF19818FAF818FA41453435000C2134AF0AF18FB40C21FD54A28F3E
FB28FB40C281AF1C1351741471741438B260610404C41C9141179179AF0AF12E
B058F660C2A818F660C217F1741370613413517F17F179058FDFFB28F660C28F
DFFB28F5BBB218F1848FB40C28598448F0E6B2071348FB40C2AF9AF7AF68FE19
B2AF9AF7AF68FAC7B2BCC8F660C2D0B641410481AF1413016920347A000C2135
1421478B6606F030681AF141318F88AC0174143078BE6067D10617414304CAD8
C5C5C0C5C5C0D5C6C6C1C6C6C1174147CAC906D6061741348F3EFB28FF6EB28F
130C2058FE19B28F16EB28F3EFB28F130C28FE19B28FBCEB2BCC8FAC7B28F660
C207061348F130C21CF1CF1C98F3EFB28FE19B28F16EB28F130C28F0CEB28FE1
9B28FBCEB28FAC7B28F16EB2071350706818F2F818F24061348F130C28FB8EB2
BCC8FAC7B213713513416F1648FB40C28F5BEB28F6DEB28FAC7B2071348FB40C
281AF142034E300004CA1308FDFFB28F16EB207061348F130C28FB8EB205BCC8
FAC7B28F660C28F5BEB28F6DEB28FAC7B2071348FB40C281AF141311430704C2
06671E81AF1420344100004C2061343429000C2135058FDFFB28F16EB28F710C
28FE19B28FF6EB28F130C21CF1CF1C98F3EFB28FE19B2BCC8F6DEB28FAC7B28F
BCEB28FAC7B2071348FB40C21CF1C48F3EFB28FBCEB28FE19B28F16EB28F130C
28FB8EB28F3EFB28FE19B28FBCEB28FAC7B28F6DEB28FAC7B281AF1C13416F16
F1688FB40C214704E6E61456CCC04C414067EB81AF1413117414381AF02819F0
203191AF1A7504C405550B75A6E5DE25A3CB3481591D7FBF5AC08F16EB20481A
F142034CA000C21341F975071471351C914781AF0B13517E1798FDFFB28FBCEB
2058F779B28F64E92151717F81AF1A04CE81AF0A8AE8C81AF138D27630B2130B
2130B2130157003064644530D9D20D29512BF8171040D9D20881308A7532FA30
6FD7388130CCD203300014713717414313504D6FCFA0EFEE44908D60B308DA1B
306FD735C2268DA1644230D9D20391402C2302CE3011920CA000CBD30D247332
230DEE32FA42524430CCD2082600823179E7E78FB97601C4143818F0981AF042
034CA00004CA81AF01174143130169AC314234779208A250B4716914281AF021
6413681AF08AC2819F0B46808603F81A40A81AF10130D380FF0DDBD1C5808A04
0E5819F20D5DED4C5C5C0C5C5C8C581AF11C0131152716F8FA4CB28F660C294B
B0AF0AF1501152716F8FA4CB28F660C204E711A8A360618F0481AF1413117481
AF1AC614517420342000014517481AF19818FAF818FA41453435000C2134AF0A
F18FB40C21FD54A28F3EFB205BCC8FB40C281AF1C1351741471741438B260610
404C41C9141179179AF0AF12EB058F660C2A818F660C217F1741370613413517
F17F179058FDFFB28F660C28FDFFB28F5BBB218F1848FB40C28598448F0E6B20
71348FB40C2AF9AF7AF68FE19B2AF9AF7AF68FAC7B2BCC8F660C2D0B64141048
1AF1413016920347A000C21351421478B6606F030681AF141318F88AC0174143
078BE6067D10617414304CAD8C5C5C0C5C5C0D5C6C6C1C6C6C1174147CAC906D
6061741348F3EFB28FF6EB28F130C2058FE19B28F16EB28F3EFB28F130C28FE1
9B28FBCEB2BCC8FAC7B28F660C207061348F130C21CF1CF1C98F3EFB28FE19B2
8F16EB28F130C28F0CEB28FE19B28FBCEB28FAC7B28F16EB2071350706818F2F
818F24061348F130C28FB8EB2BCC8FAC7B213713513416F1648FB40C28F5BEB2
8F6DEB28FAC7B2071348FB40C281AF142034E300004CA1308FDFFB28F16EB207
061348F130C28FB8EB205BCC8FAC7B28F660C28F5BEB28F6DEB28FAC7B207134
8FB40C281AF141311430704C206671E81AF1420344100004C2061343429000C2
135058FDFFB28F16EB28F710C28FE19B28FF6EB28F130C21CF1CF1C98F3EFB28
FE19B2BCC8F6DEB28FAC7B28FBCEB28FAC7B2071348FB40C21CF1C48F3EFB28F
BCEB28FE19B28F16EB28F130C28FB8EB28F3EFB28FE19B28FBCEB28FAC7B28F6
DEB28FAC7B281AF1C13416F16F1688FB40C214704E6E61456CCC04C414067EB8
1AF1413117414781AF0A042034CA000C21341F975071471351C914781AF0B135
17E1798FDFFB2058F64E92151717F81AF1A04CE81AF0A8AE6D81AF138D27630B
2130B2130B21300EAF"
END_ASC
BYTES: #FAE0h 2215
BEGIN_UU fft.uue
begin 666 fft.dir
M2%!(4#0X+4&6*O!_1@H````$4U!%0P2=+>!A(T@N,&!D1(7D`@1!0E-6A_N!
MFQS)HG*V&M_0L=`?,P&B*QXY-K(2`V0`4!#D=,145-#9`BU9(?L8%T#0V0*(
M,6`E8BP:AA@#J%>#K6&Y,=;N([2B(D0#S"U0#``H$T=^^)MG$#3!%'08^K`Q
M%.9A&1-Q'C1Q%'1QQ(R*%D$31V$$A!^9`YWL&/K`^(C*$#47]S$&%G47]U#X
MH+R";^\J^->V@F_D*7`Q%`47]ACZP4#L&/K`M8JA'X,O9P,K,;`2`RT!0!`D
M-&5%T-D"+5DA^Q@70-#9`H@Q8"5B+!J&&`.H5X.M8;DQUNXCM*(B1`/,+0`.
M`"@31W[XFV<0-,$4=!CZ@#$4YF$9$W$>-'$4=''$C(H601-'802$'YD#G>P8
M^L#XB,H`=5*`_^8K=P0Q!H9O[2OXRK>"/Y\K^$:>`A=#47!ACZ$?#,2.H0]<
MJMAO-A`U%_?X2KRBG_JG;_@>N0*Q$@,K,6`4``1)1D94!)TMT)(5LH]Q`02=
M+8`8`ZA7(Z\#]GV#&`/,+3`#`$$7<W$4-#$%U/;\"O[N1`G8!CN`K;$#]GU3
M+&+8&D8D`YTM,!D$PC(@[`,1*<`*`+P]T$(W(S+0[B.O)"5$`\PM<&<`*!.7
M?G[XFV<03$@0^)H0\D,,0*`$"L&/H0<10T,1"6RA,D0W<I@"H%2Q>608*A
M#Q)&,8:A#Z@L&/FP9`AH,(^A!(JA'Q`#/0C_T+T=7`BH0."%D2_0U=[$Q<7`
MQ<7(A:$?P1`347)ACZ_$*_AFP)*T"_J@'P41)1?V^$J\@F\&+$!^$8HZ!A;X
M0!CZ03$11QCZH6Q!%4<"0P(`$%1QA*$?B8&OCX&O%%1#4P#`$D/ZH!_X2\`2
MWT4J^.._@K\$+!CZP3$51T$71T*P860$!,P1D4<1F7^J`?X@N%;P8LBH%O
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
2#XKJUACZ,=AR-K`2`RLQL!(#
`
end
END_UU